/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * Clase que representa una Demension. Alto, Ancho y Profundidad de un mueble
 * @author Catalina
 */
@Entity
@Table(name="dimension")
public class Dimension implements Serializable, Cloneable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_DIMENSION")
    @SequenceGenerator(name = "SEQ_DIMENSION", allocationSize = 1, sequenceName = "dimension_seq")
    private Long idDimension;
    private Double alto;
    private Double ancho;
    private Double profundidad;

    /**
     * Constructo de Dimension
     */
    public Dimension() {
    }

    /**
     * Obtiene la llave primaria de este objeto
     * @return Long
     */
    public Long getIdDimension() {
        return idDimension;
    }

    /**
     * Se asigna la llave primaria de este objeto
     * @param idDimension
     */
    public void setIdDimension(Long idDimension) {
        this.idDimension = idDimension;
    }

    /**
     * Se obtiene el atributo alto
     * @return
     */
    public Double getAlto() {
        return alto;
    }

    /**
     * Se asigna el alto de la Dimension
     * @param alto
     */
    public void setAlto(Double alto) {
        this.alto = alto;
    }

    /**
     * Se obtiene el ancho
     * @return
     */
    public Double getAncho() {
        return ancho;
    }

    /**
     * Se asigna el ancho de la Dimensión
     * @param ancho
     */
    public void setAncho(Double ancho) {
        this.ancho = ancho;
    }

    /**
     * Se obtiene la profundidad de la Dimensión
     * @return
     */
    public Double getProfundidad() {
        return profundidad;
    }

    /**
     * Se asigna la profundidad
     * @param profundidad
     */
    public void setProfundidad(Double profundidad) {
        this.profundidad = profundidad;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Dimension)
            return this.idDimension.longValue() == ((Dimension)obj).getIdDimension().longValue();
        return super.equals(obj);
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        Dimension d = new Dimension();
        d.setAlto(this.alto);
        d.setAncho(this.ancho);
        d.setIdDimension(idDimension);
        d.setProfundidad(profundidad);
        return d;
    }
}
